<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    /* 对象的概念:在JavaScript中对象是一组'无序'的相关属性和方法的集合
    所有的事物都是对象,例如:字符串,数组,数值,函数等
    对象是由属性和方法构成:
    属性:事物的特征,常用名词
    方法:事物的行为,常用动词

    为什么需要对象:保存一个值时,可以使用变量;保存一组值时,可以使用数组;
    保存一个人的完整信息就可以用对象
     */
    /* 对象书写格式:
    var 对象名={
        属性1:属性值1,
        属性2:属性值2,
        方法名:方法
    } */

    // 创建自定义对象的三种方式
    // 1.利用字面量创建对象
    var person={
        name:'张三',
        age:18,
        sex:'男',
        chifan:function(){
            alert('我今天吃了四顿饭');
        }

    }
    /* 对象的使用:
        对象的属性:对象中存储具体数据的键值对,键称为对象的属性,即对象中存储具体数据的项
        对象的方法:对象中存储函数的键值对,键称为对象的方法,即对象中存储函数的项 
        
        访问对象属性:对象里面属性的调用:
        1. 对象名.属性名 (这个点可以理解为向下一层)
        2. 对象['属性名'] (注意中括号中要加引号)
        
        调用对象的方法:
        对象里面调用方法: 对象.方法名()*/
    console.log(person.name);
    console.log(person['name']);
    person.chifan();
    /* 属性是对象的一部分,而变量不是,变量是单独存储数据的容器
    变量:单独声明赋值,单独存在
    属性:在对象里面的变量称为属性,不需要声明
    函数:单独存在,通过函数名()就可以调用
    方法:是对象的一部分,方法不需要声明,使用对象名.方法名()调用 */

    /* 2.通过new Object()创建对象 
        通过内置构造函数Object创建对象,此时person1变量已经保存了创建出来的空对象*/
    var person1=new Object();//创建一个空对象
    // 给对象添加属性和方法
    person1.name='李四';
    person1.age='28';
    person1.chifan=function(){
        alert('今天想摆烂');
    }
    /* Object() 首字母大写,还需要使用new关键字
    使用格式: 对象名.属性名=值 */

    /* 3.通过构造函数创建对象
        构造函数:是一种特殊的函数,主要用来初始化对象,
        即为对象成员变量赋初始值,它与new运算符一起使用,
        我们可以把对象中一些公共属性和方法封装到这个函数里;
    构造函数的封装格式:
        function 构造函数名(参数列表){
            this.属性名1=参数1,
            this.属性名2=参数2,
            this.属性名3=参数4,
            this.方法名=函数体
        } 
    使用:
        var obj=new Object(实参1,实参2,实参3,函数)*/
    function Object(name,age,chifan){
        this.name=name,
        this.age=age,
        this.chifan=chifan
    }
    var obj=new Object('李五','20',function(){alert('哈哈,吃撑了')});
    console.log(obj.name);
    /* 注意:函数内的属性和方法前面需要添加this,标签当前对象的属性和方法
    构造函数中不需要return返回值
    当我们创造对象时,必须用 new 来调用构造函数*/
</script>
</html>